package com.dcm.live.service;

import com.dcm.live.dto.LikedCountDto;
import com.dcm.live.entity.UserLikeEntity;

import java.util.List;

/**
 * [点赞]
 *
 * @author : [pengrongsheng]
 * @createTime : [2021/4/8]
 */
public interface LikedService {
    /**
     * 保存点赞记录
     * @param userLikeEntity 保存的点赞记录
     * @return
     */
    UserLikeEntity save(UserLikeEntity userLikeEntity);

    /**
     * 即查询都谁给这个人点赞过
     * @param likedUserId 被点赞人的id
     * @return
     */
    List<UserLikeEntity>  getLikedListByLikedUserId(Long likedUserId);

    /**
     * 即查询这个人都给谁点赞过
     * @param likedPostId 用户
     * @return
     */
    List<UserLikeEntity> getLikedListByLikedPostId(Long likedPostId);


    /**
     * 将Redis里的点赞数据存入数据库中
     */
    void transLikedFromRedis2db();

    /**
     * 将Redis中的点赞数量数据存入数据库
     */
    void transLikedCountFromRedis2db();

    /**
     * 把点赞记录存入redis
     * @param uid 用户id
     * @param id 主播的用户id
     */
    void saveLiked2Redis(Long uid, Long id);

    /**
     * 取消点赞的redis操作
     * @param uid 用户id
     * @param id 主播的用户id
     */
    void unLikedFromRedis(Long uid, Long id);

    /**
     * 把 uid 对应主播的点赞 +1
     * @param uid
     */
    void incrementCount(Long uid);
    /**
     * 把 uid 对应主播的点赞 -1
     * @param uid
     */
    void decrementCount(Long uid);

    /**
     * 获取Redis中存储的所有点赞数据
     * @return
     */
    List<UserLikeEntity> getLikedDataFromRedis();

    /**
     * 获取Redis中存储的所有点赞数量
     * @return
     */
    List<LikedCountDto> getLikedCountFromRedis();

}
